package com.llb666.shop.order.domain.repository;

import com.llb666.common.core.utils.page.PagedGridResult;
import com.llb666.shop.order.api.vo.center.MyOrdersVo;
import com.llb666.shop.order.domain.entity.OrderStatus;
import com.llb666.shop.order.domain.entity.Orders;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 订单仓储层.
 *
 * @author llb666
 */
@RestController
public interface OrdersRepository {

    /**
     * 更新订单状态为"已发货，待收货"".
     *
     * @param orderId 订单id
     */
    void updateDeliverOrderStatus(String orderId);

    /**
     * 更新订单状态为"交易成功".
     *
     * @param orderId 订单id
     * @return true/false
     */
    boolean updateReceiveOrderStatus(String orderId);

    /**
     * 删除订单
     *
     * @param userId  用户id
     * @param orderId 订单id
     * @return true/false
     */
    boolean deleteOrder(String userId, String orderId);

    /**
     * 查询我的订单 -- 已评价.
     *
     * @param userId  用户id
     * @param orderId 订单id
     * @return 订单
     */
    Orders queryMyOrder(String userId, String orderId);

    /**
     * 更新订单为"已评价".
     *
     * @param orderId 订单id
     */
    void updateCommentsStatus(String orderId);

    /**
     * 新增订单.
     *
     * @param order 订单
     */
    void insert(Orders order);

    /**
     * 根据用户id和订单状态查询订单总数
     *
     * @param userId      用户Id
     * @param orderStatus 订单状态
     * @return Integer 订单总数
     */
    Integer getOrderStatusCounts(String userId, Integer orderStatus);

    /**
     * 根据用户id和订单状态查询订单状态列表.
     *
     * @param userId      用户Id
     * @param orderStatus 订单状态
     * @param page        -
     * @param pageSize    -
     * @return 订单状态列表
     */
    PagedGridResult<MyOrdersVo> queryMyOrderByStatus(String userId, Integer orderStatus, Integer page, Integer pageSize);

    /**
     * 查询用户的订单动态.
     *
     * @param userId   用户id
     * @param page     -
     * @param pageSize -
     * @return 订单列表G
     */
    PagedGridResult<OrderStatus> getMyOrderTrend(String userId, Integer page, Integer pageSize);

    /**
     * 根据登录用户查询订单列表.
     *
     * @param userId 用户Id
     * @return 用户的订单列表
     */
    List<Orders> getMyOrders(String userId);

}
